import pandas as pd
import os
import sqlite3
from datetime import datetime
import yaml

def read_config(config_file):
    with open(config_file, 'r', encoding='utf-8') as file:
        config = yaml.safe_load(file)
    return config

# 获取当前时间，用于“录入时间”列
current_time = datetime.now().strftime('%Y-%m-%d %H:%M:%S')

# 加载配置文件
config = read_config('config.yaml')

batch_folder_path = config['file_paths']['temp_folder']  # 批量处理文件夹路径
wechat_db_path = config['file_paths']['db']             # 微信账单数据库路径

# 连接到 SQLite 数据库（如果不存在则会自动创建）
db_connection = sqlite3.connect(wechat_db_path)

# 遍历文件夹中的所有 .xlsx 文件
for excel_file in os.listdir(batch_folder_path):
    if excel_file.endswith('.xlsx'):
        excel_file_path = os.path.join(batch_folder_path, excel_file)

        try:
            # 读取 Excel 文件，从第 17 行开始作为数据行（header=16表示第17行为表头）
            transaction_dataframe = pd.read_excel(excel_file_path, header=16)

            # 检查是否有“金额(元)”列
            if '金额(元)' in transaction_dataframe.columns:
                # 去除“金额(元)”列中的 ¥ 符号，并转为浮点数
                transaction_dataframe['amount'] = transaction_dataframe['金额(元)'].str.replace('¥', '', regex=False).astype(float)
            else:
                print(f"文件 {excel_file} 中没有‘金额(元)’列，跳过处理。")
                continue

            # 将“交易时间”列转换为时间格式（如果存在）
            if '交易时间' in transaction_dataframe.columns:
                transaction_dataframe['transaction_time'] = pd.to_datetime(transaction_dataframe['交易时间'], errors='coerce')

            # 添加“录入时间”列
            transaction_dataframe['recorded_time'] = current_time

            # 写入 SQLite 数据库（自动建表，追加模式）
            transaction_dataframe.to_sql('wechat_bills', db_connection, if_exists='append', index=False)

            print(f"已成功处理并写入文件：{excel_file}")

        except Exception as processing_error:
            print(f"处理文件 {excel_file} 时发生错误：{processing_error}")
            continue

# 关闭数据库连接
db_connection.close()
print("所有Excel文件处理完成，数据已成功写入SQLite数据库。")